// Decompiled by Jad v1.5.8e. Copyright 2001 Pavel Kouznetsov.
// Jad home page: http://www.geocities.com/kpdus/jad.html
// Decompiler options: braces fieldsfirst space lnc
package com.google.zxing.common;
import com.google.zxing.Binarizer;
import com.google.zxing.LuminanceSource;
import java.lang.reflect.Array;
// Referenced classes of package com.google.zxing.common:
// GlobalHistogramBinarizer, BitMatrix
public final class HybridBinarizer extends GlobalHistogramBinarizer
{
private static final int a = 3;
private static final int b = 8;
private static final int c = 7;
private static final int d = 40;
private BitMatrix e;
public HybridBinarizer(LuminanceSource luminancesource)
{
super(luminancesource);
}
private static void a(byte abyte0[], int i, int j, int k, int l, BitMatrix bitmatrix)
{
int i1 = i + j * l;
for (int j1 = 0; j1 < 8;)
{
for (int k1 = 0; k1 < 8; k1++)
{
if ((0xff & abyte0[i1 + k1]) <= k)
{
bitmatrix.set(i + k1, j + j1);
}
}
j1++;
i1 += l;
}
}
private static void a(byte abyte0[], int i, int j, int k, int l, int ai[][], BitMatrix bitmatrix)
{
for (int i1 = 0; i1 < j; i1++)
{
int j1 = i1 << 3;
if (j1 + 8 >= l)
{
j1 = l - 8;
}
for (int k1 = 0; k1 < i; k1++)
{
int l1 = k1 << 3;
if (l1 + 8 >= k)
{
l1 = k - 8;
}
int i2;
int j2;
int k2;
int l2;
if (k1 > 1)
{
i2 = k1;
} else
{
i2 = 2;
}
if (i2 < i - 2)
{
j2 = i2;
} else
{
j2 = i - 3;
}
if (i1 > 1)
{
k2 = i1;
} else
{
k2 = 2;
}
if (k2 >= j - 2)
{
k2 = j - 3;
}
l2 = 0;
for (int i3 = -2; i3 <= 2; i3++)
{
int ai1[] = ai[k2 + i3];
l2 += ai1[j2 - 2] + ai1[j2 - 1] + ai1[j2] + ai1[j2 + 1] + ai1[j2 + 2];
}
a(abyte0, l1, j1, l2 / 25, k, bitmatrix);
}
}
}
private static int[][] a(byte abyte0[], int i, int j, int k, int l)
{
int ai1[][];
int i1;
int ai[] = {
j, i
};
ai1 = (int[][])Array.newInstance(Integer.TYPE, ai);
i1 = 0;
_L5:
if (i1 >= j) goto _L2; else goto _L1
_L1:
int j1;
int k1;
j1 = i1 << 3;
if (j1 + 8 >= l)
{
j1 = l - 8;
}
k1 = 0;
_L4:
if (k1 >= i)
{
continue; /* Loop/switch isn't completed */
}
int l1 = k1 << 3;
if (l1 + 8 >= k)
{
l1 = k - 8;
}
int i2 = l1 + j1 * k;
int j2 = 0;
int k2 = 0;
int l2 = 255;
int i3 = 0;
while (j2 < 8)
{
int l3 = i3;
int i4 = 0;
while (i4 < 8)
{
int k4 = 0xff & abyte0[i2 + i4];
l3 += k4;
if (k4 < l2)
{
l2 = k4;
}
int j3;
int k3;
int j4;
if (k4 <= k2)
{
k4 = k2;
}
i4++;
k2 = k4;
}
j4 = j2 + 1;
i2 += k;
j2 = j4;
i3 = l3;
}
j3 = i3 >> 6;
if (k2 - l2 <= 24)
{
k3 = l2 >> 1;
if (i1 <= 0 || k1 <= 0)
{
break MISSING_BLOCK_LABEL_308;
}
j3 = ai1[i1 - 1][k1] + 2 * ai1[i1][k1 - 1] + ai1[i1 - 1][k1 - 1] >> 2;
if (l2 >= j3)
{
break MISSING_BLOCK_LABEL_308;
}
}
_L6:
ai1[i1][k1] = j3;
k1++;
if (true) goto _L4; else goto _L3
_L3:
i1++;
goto _L5
_L2:
return ai1;
j3 = k3;
goto _L6
}
public Binarizer createBinarizer(LuminanceSource luminancesource)
{
return new HybridBinarizer(luminancesource);
}
public BitMatrix getBlackMatrix()
{
if (e != null)
{
return e;
}
LuminanceSource luminancesource = getLuminanceSource();
if (luminancesource.getWidth() >= 40 && luminancesource.getHeight() >= 40)
{
byte abyte0[] = luminancesource.getMatrix();
int i = luminancesource.getWidth();
int j = luminancesource.getHeight();
int k = i >> 3;
if ((i & 7) != 0)
{
k++;
}
int l = j >> 3;
if ((j & 7) != 0)
{
l++;
}
int ai[][] = a(abyte0, k, l, i, j);
BitMatrix bitmatrix = new BitMatrix(i, j);
a(abyte0, k, l, i, j, ai, bitmatrix);
e = bitmatrix;
} else
{
e = super.getBlackMatrix();
}
return e;
}
}